home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / cgazv4n3.zip / PRINTCLI.C < prev    next >
C/C++ Source or Header  |  1990-01-27  |  4KB  |  143 lines

  1. /*******************  PRINTCLI.C  ---  Listing 6  ********************
  2.  * Author: Victor Volkman
  3.  * Purpose: Sample client routine--transfers a file to the print
  4.  *          server defined in PRINTSRV.C
  5.  *
  6.  * Compiler: Microsoft C 5.1, Turbo C 2.0
  7.  *
  8.  * Source code may be freely used if the authorship is acknowledged.
  9.  * Object code may be freely used.
  10.  *********************************************************************/
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <io.h>
  15. #include <fcntl.h>
  16. #include <string.h>
  17.  
  18. #include "netbios.h"
  19. #include "printapp.h"
  20. #include "netbios.fd"
  21.  
  22. #ifndef MAKEFD  /* fd = compiler generated function declaration file */
  23. #include "printcli.fd"
  24. #endif
  25.  
  26. PRINT_MSG client_msg;
  27.  
  28. int main(argc,argv)
  29. int argc;
  30. char **argv;
  31. {
  32.    SESSION lsn;
  33.    int err;
  34.    int send_file;
  35.    char client_name[NAME_LEN];
  36.  
  37.    printf("Demonstration Client Process\n\n");
  38.    nb_debug = getenv("NB_DEBUG") != NULL;
  39.    if (err=StartupClient(argc, argv, &send_file) )
  40.       return err;
  41.  
  42.    if (err=ConnectToServer(&lsn, client_name) )
  43.       return err;
  44.  
  45.    if (err=SendPrintFile(lsn, send_file) )
  46.       return err;
  47.  
  48.    close(send_file);
  49.    err = DisconnectFromServer(lsn, client_name);
  50.  
  51.    printf("sizeof %d\n",sizeof(NCB));
  52.    return err;
  53. }
  54.  
  55.  
  56. int StartupClient(argc,argv,send_file)
  57. int argc;
  58. char **argv;
  59. int *send_file;
  60. {
  61.    if (!IsNetbiosLoaded()) {
  62.       fprintf(stderr, "NetBIOS not loaded... aborting\n");
  63.       return CLI_NO_NETBIOS;
  64.       }
  65.  
  66.    if (argc < 2) {
  67.       fprintf(stderr, "%s: filename missing!\n\n",argv[0]);
  68.       fprintf(stderr, "Usage:  PRINTCLI filename\n");
  69.       return CLI_NO_ARGS;
  70.       }
  71.  
  72.    strcpy(client_msg.filename,argv[1]);
  73.    if ((*send_file=open(client_msg.filename,RD_FLAGS)) < 0) {
  74.       fprintf(stderr,"Unable to open send file <%s>... aborting\n",
  75.               client_msg.filename);
  76.       return CLI_BAD_FILE;
  77.       }
  78.  
  79.    return CLI_OK;
  80. }
  81.  
  82.  
  83. int ConnectToServer(lsn_p, client_name)
  84. SESSION *lsn_p;
  85. char *client_name;
  86. {
  87.    char *server_name;
  88.    char *name_ptr;
  89.    int err;
  90.  
  91.    if ((name_ptr=getenv(default_client_name)) == NULL)
  92.       strcpy(client_name, default_client_name);
  93.    else
  94.       strcpy(client_name, name_ptr);
  95.  
  96.    if ((server_name=getenv(default_server_name)) == NULL)
  97.       server_name = default_server_name;
  98.  
  99.    NetbiosReset();
  100.    if (err=NetbiosAddName(client_name)) {
  101.       fprintf(stderr,"(%02X):  unable to add client name <%s>... aborting\n",
  102.               err, client_name);
  103.       return CLI_BAD_CLIENT_NAME;
  104.       }
  105.  
  106.    if (err=NetbiosCall(lsn_p,server_name,client_name,CLIENT_RTO,CLIENT_STO)) {
  107.       fprintf(stderr,"(%02X):  unable to find server name <%s>... aborting\n",
  108.               err, server_name);
  109.       NetbiosDeleteName(client_name);  /* must drop before exiting */
  110.       return CLI_CANT_CALL;
  111.       }
  112.  
  113.    return CLI_OK;
  114. }
  115.  
  116.  
  117. int SendPrintFile(lsn, send_file)
  118. SESSION lsn;
  119. int send_file;
  120. {
  121.    int bytes_read;
  122.    int err;
  123.  
  124.    while ((bytes_read=read(send_file, client_msg.buffer, MAX_MSG_LEN)) > 0 ) {
  125.       client_msg.length = bytes_read;
  126.       if (NetbiosSend(lsn, (char *)&client_msg, sizeof(PRINT_MSG)) )
  127.          return CLI_SEND_FAILED;
  128.       }
  129.  
  130.    client_msg.length = 0;    /* End-of-transfer marker */
  131.    err = NetbiosSend(lsn, (char *)&client_msg, sizeof(PRINT_MSG));
  132.    return err ? CLI_SEND_FAILED : CLI_OK;
  133. }
  134.  
  135.  
  136. int DisconnectFromServer(lsn,client_name)
  137. SESSION lsn;
  138. char *client_name;
  139. {
  140.    NetbiosHangup(lsn);
  141.    NetbiosDeleteName(client_name);  /* must drop before exiting */
  142.    return CLI_OK;
  143. }